package cn.shengchao.examstar.knowledge.shared.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 课程知识点DTO
 * 集成课程和知识点信息
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CourseKnowledgeDTO {

    /**
     * 课程ID
     */
    private Long courseId;
    
    /**
     * 课程名称
     */
    private String courseName;
    
    /**
     * 课程图片URL
     */
    private String imageUrl;
    
    /**
     * 课程学时
     */
    private Double classHour;
    
    /**
     * 知识点总数
     */
    private Integer knowledgeNodeCount;
    
    /**
     * 已解锁的知识点数量
     */
    private Integer unlockedKnowledgeNodeCount;
    
    /**
     * 学习进度百分比 (0-100)
     */
    private Double learningProgress;
    
    /**
     * 最近学习时间
     */
    private LocalDateTime lastLearningTime;
    
    /**
     * 总学习时长 (秒)
     */
    private Long totalLearningTimeSeconds;
    
    /**
     * 知识点掌握度信息
     */
    private MasteryAnalysisDTO masteryAnalysis;
    
    /**
     * 课程关联的知识点列表
     */
    private List<CourseKnowledgeNodeDTO> knowledgeNodes;
    
    /**
     * 课程知识点DTO
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class CourseKnowledgeNodeDTO {
        /**
         * 知识点ID
         */
        private Long knowledgeNodeId;
        
        /**
         * 知识点名称
         */
        private String knowledgeNodeName;
        
        /**
         * 是否已解锁
         */
        private Boolean unlocked;
        
        /**
         * 解锁时间
         */
        private LocalDateTime unlockTime;
        
        /**
         * 解锁类型 (1:支付, 2:免费)
         */
        private Integer unlockType;
        
        /**
         * 学习进度 (0-100)
         */
        private Integer learningProgress;
        
        /**
         * 学习时长 (秒)
         */
        private Long learningTimeSeconds;
        
        /**
         * 最后学习时间
         */
        private LocalDateTime lastLearningTime;
        
        /**
         * 掌握度等级 (S-精通, A-掌握, B-理解, C-初步了解)
         */
        private String masteryLevel;
        
        /**
         * 掌握度百分比 (0-100)
         */
        private Double masteryPercentage;
    }
} 